home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Education / PC-SiG's World of Education.iso / wor / disk0978.zip / MMAKE.DOC < prev    next >
Text File  |  1988-05-12  |  28KB  |  668 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                                 Mmake
  11.  
  12.                       Version 1.3 User's Manual
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                              MicroSystems
  19.                              P.O. Box 471
  20.                           Carbondale, IL  62903
  21.   
  22.  
  23.  
  24.  
  25. REGISTRATION
  26.  
  27. This program is made available to the public as shareware.  You are free
  28. to make and distribute an unlimited number of copies. You are to also
  29. entitled to use the program without cost on a trial basis, to see if 
  30. it is of value to you.
  31.  
  32. If you decide to use the program, you are requested to register by
  33. sending $20 along with your name and address to the address on the
  34. cover of this manual.
  35.  
  36. The existence of user-supported software as an alternative to costly
  37. commercial software depends on the good faith and cooperation of the
  38. software's users.  Your $20 registration will enable us to continue 
  39. to upgrade this product and to develop others.   Commercial versions 
  40. of the make utility cost between $89 and $150.
  41.  
  42. Registered users are entitled to free support and to at least one
  43. free upgrade. 
  44.  
  45.  
  46. FEEDBACK and SUPPORT
  47.  
  48. Registered users will be given assistance if any problems are
  49. encountered using this program.  If you enclose a self-addressed,
  50. stamped envelope with your questions, it will help us to answer you 
  51. more quickly.
  52.  
  53. Support is not guaranteed to non-registered users.  However, we do 
  54. appreciate feedback from all users, registered or otherwise.  If you
  55. encounter a bug when using this program, please let us know so that
  56. we can correct it and save others from similar aggravation.  When 
  57. reporting a problem, the more detail you can provide to us, the more
  58. likely it is that we will be able to reproduce (and fix) the bug.  
  59. In addition to a description of the problem, it will help if you send
  60. us copies of the files that were being processed when the problem 
  61. occured, or "dummy" files that cause the same problem. 
  62.  
  63. We also welcome suggestions for improvements and added features, and 
  64. we are interested in hearing about how you have used Mmake.
  65.  
  66.  
  67.  
  68.  
  69.  
  70. WHAT MMAKE DOES
  71.  
  72. Mmake is based on the Unix "make" utility and performs the same 
  73. function, though it does not yet provide all of the sophisticated
  74. features of the Unix utility.
  75.  
  76. Mmake is used by programmers to automate the process of compiling and 
  77. linking a program that is contained in several (or numerous) source 
  78. files.   It can be used with any language and with any compiler that 
  79. can be run from the Ms-Dos command line.  It can speed development
  80. enormously, both by making recompilation of a program go much more 
  81. quickly, and by preventing errors when a changed file is not recompiled.
  82.  
  83. When creating or editing a complex program, it is often difficult to 
  84. remember which source files or modules have been changed and need to 
  85. be recompiled.  Mmake automates this process so that the programmer
  86. can forget about it.  After editing files, the programmer simply 
  87. runs Mmake and the modules that have been changed will be recompiled.
  88. Files that have not been changed are not recompiled. 
  89.  
  90. Without a make utility, there are two basic strategies to compiling and
  91. linking a program as it is being developed or when it is changed.    The 
  92. first is to simply recompile and re-link all of the source files that 
  93. make up the program, every time any of them are changed.  This has the 
  94. serious drawback of vastly increasing the amount of time spent recompiling 
  95. the program.  The other strategy is to break the program into modules 
  96. which can be compiled separately, then trying to keep track of which ones 
  97. have been changed or added.  This can be difficult, especially when an
  98. "include" file is edited; any source files that include that "include"
  99. file need to be recompiled, while others do not.   This puts the burden of
  100. keeping track of which modules have been affected on the programmer, who 
  101. should be free to think about the program being written.  It also introduces 
  102. the possibility that a module that should be recompiled may not be, 
  103. thus generating errors in the program and wasting even more of the 
  104. programmer's time in debugging.
  105.  
  106. Mmake saves the time that is wasted by compiling files unnecessarily, 
  107. while preventing the errors that result when a programmer forgets to 
  108. recompile a module that has been changed.  It also frees the programmer
  109. to think about the program being written.  When the program is ready to
  110. be recompiled, Mmake automatically determines which source files have
  111. been changed or affected by changes, and runs the commands necessary to
  112. re-make the program.
  113.  
  114. Mmake does this by comparing the last modification times of the files you
  115. are creating with the modification times of the files which are used to
  116. create them.  Depending on which files have been changed,  Mmake runs
  117. the appropriate programs to bring them up to date -- compilers, 
  118. assemblers, linkers, or any other executable Ms-Dos program.  
  119.  
  120. We have used Mmake with 'C' compilers, the Clipper DBase compiler, the 
  121. Macro Assembler, and with programs that contained all three.  It will
  122. work with any compiler that can be run from the Ms-Dos command line.
  123.  
  124.  
  125.  
  126. WHAT MMAKE DOES, continued
  127.  
  128. While Mmake is designed as a tool for programmers, it can be used in
  129. any situation in which an action must be taken for files which have 
  130. changed and not taken for those which have not.  For example, a large 
  131. document consistng of many files could be run through a spell-checker or
  132. text formatter, using Mmake to insure that all the files changed, and
  133. only the files changed, were spell-checked or formatted.  Or Mmake could 
  134. compare modification times of files on a source disk and files on a backup 
  135. disk, and copy the source to the backup when the source file was the 
  136. more-recently changed.   
  137.  
  138.  
  139. MEMORY REQUIREMENTS
  140.  
  141. The amount of memory needed to run Mymake depends on the commands in your
  142. make file.  Mymake.exe itself takes up about 25 K of memory while it
  143. is running.  In addition, you must have enough memory to load and run
  144. any command line in your make file.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150. HOW TO USE MMAKE
  151.  
  152. The first step in using Mmake is to create a "make file," which is 
  153. a description of the relationships among the files in the program
  154. you are making.  The format of the make file is described in detail
  155. below.  Once the make file is created, the process of developing a 
  156. program or modifying an existing program is greatly simplified; the 
  157. time invested in creating the make file is soon repaid.  Make files 
  158. also help to document a program, since they show all of the source 
  159. files contained in it and the relationships among them.  Of course,
  160. as you add new source files to your program, you have to add those 
  161. files to the make file as well.
  162.   
  163. Once a make file is created, using Mmake is extremely simple.
  164. The command line syntax is:
  165.  
  166.      Mmake /F filename /H /S /D /I 
  167.  
  168. Everything after "Mmake" is optional, including the filename, which is 
  169. part of the /F option.  The options can be given in any order.  The 
  170. meaning of the command lines options are as follows:
  171.  
  172.      /F filename - Use "filename" for the make file.  If this
  173.           option is not given, Mmake uses the default file 
  174.           name "makefile".
  175.  
  176.      /H - Help: display a list of Mymake's options.
  177.                 
  178.      /S - Silent: don't display commands before running them. 
  179.           Normally, Mmake displays each command as it is run. 
  180.           This option turns off that display.  Note that the 
  181.           output of the programs themselves are not turned off, 
  182.           just Mmake's display of the command line.
  183.  
  184.      /D - Display only: display commands but don't run them.
  185.           With this option, Mmake will show you the commands
  186.           that would be run, based on the modification times of
  187.           files, but it does not actually run the commands.
  188.  
  189.     /I - Ignore exit codes:  normally, Mmake will stop running if a
  190.          compiler or other program returns with an exit code other
  191.          than zero.  Most programs use non-zero exit codes to indicate
  192.          an error, so this is normally desirable.  However, it you
  193.          need to run a program that returns a non-zero exit code, the
  194.          /I option can be used.  It tells Mmake to simply ignore the
  195.          exit codes of the programs it runs.
  196.    
  197. For all options, a dash (-) may be used instead of the slash (e.g.,
  198. -D or -S).
  199.  
  200.  
  201.  
  202. HOW TO USE MMAKE, continued
  203.  
  204. As Mmake runs, it will display the commands that it is executing (unless 
  205. the /S option is used).  If no files have been changed since the last
  206. time they were compiled or linked, Mmake simply displays a message that
  207. all files are up to date.  If any of the programs that Mmake runs 
  208. encounter an error, Mmake will display the error code returned by the 
  209. program, and stop.  Once you have corrected the source of the problem,
  210. run Mmake again and it will take up where it left off, making only 
  211. those files that still need to be made.
  212.  
  213. Note that since Mmake uses the modification times of files, the date and
  214. time must be kept current on your system (which is a good idea in any 
  215. case).   By far the most convenient way to do this is with a battery-
  216. powered clock chip.  If you don't have such a chip in your computer, 
  217. you will have to enter the date and time before editing source files.  
  218. (Usually, this is done when booting Dos).
  219.  
  220.  
  221.  
  222. SETTING UP THE MAKE FILE
  223.  
  224. Mmake requires a "make file," which describes to it the files in your
  225. program and the dependencies among them.  You can use Mmake for as 
  226. many different projects as you like, by setting up a separate make 
  227. file for each program.
  228.  
  229. The make file is a plain ascii text file; it can be created with any 
  230. text editor or word processor that will create ascii files.  You can 
  231. name the make file anything you like.  One convention is to name the 
  232. make file the same name as the program you are creating, but without 
  233. any extension.  For example, using "chess" as the name of a make file 
  234. that creates a program named "chess.exe."  If you do not give Mmake a 
  235. make file name, it will use a file named "makefile" in the default directory.  
  236.  
  237. The make file consists of a number of records.  Each record starts with
  238. a filename, which is the file to be created.  This is followed by a 
  239. colon, then a list of files upon which the file being created depends.
  240. This "dependency line" is followed by one or more command lines, which 
  241. are the commands to be executed in order to create the file being created.
  242.  
  243. The general format of a make file record is as follows:
  244.  
  245. File to be created:  files on which it depends
  246.     command to create the file   
  247.  
  248. An example will help make this clear.  Below is a simple make file
  249. for an imaginary chess program, followed by an explanation of its 
  250. contents.  (In the example, only three files are being created.  In
  251. fact up to 256 files can be created by each make file):
  252.  
  253. # chess - make file for chess.exe    
  254. # dummy file used for example only
  255. # 7/12/87
  256.  
  257. Chess.exe : Chess.obj   drawscrn.obj
  258.     link Chess drawscrn;
  259.  
  260. Chess.Obj : Chess.c  Games.h
  261.     cl -c Chess;
  262.  
  263. Drawscrn.obj : a:\chessboard\drawscrn.asm
  264.     masm  a:\chessboard\drawscrn;
  265.  
  266.  
  267. The first three lines of this file are comments, and have no effect on 
  268. Mmake's actions.  Comment lines can be placed anywhere in the file, 
  269. as long as the first non-space character of a comment line is "#".
  270. Similarly,  blank lines may be inserted to improve readability;
  271. they are ignored by Mmake.
  272.  
  273.  
  274.  
  275. SETTING UP THE MAKE FILE, continued
  276.  
  277. In the example make file, the first dependency line tells Mmake that
  278. Chess.exe "depends on" each of the two .obj files listed on that line.
  279. That is, if either of these files change, Chess.exe must be remade.   
  280. Mmake will compare the modification times of the two .Obj files with 
  281. that of chess.exe; if either of them have been changed since Chess.exe 
  282. was last created, Chess.exe will be remade.   Chess.exe will also be
  283. created if it does not exist.
  284.  
  285. The next line of the sample make file is a command line.  It begins with a 
  286. tab character, and tells Mmake how to remake Chess.exe if it decides to 
  287. do so. This example command line tells Mmake to run the link program,
  288. passing the names of the two .obj files to link as arguments.  Mmake
  289. will look for the link program in the current directory, then look in the
  290. directories specified by the Dos PATH string. This command line, 
  291. like the others in this example, is just an example; any linker or 
  292. compiler could be used -- or, for that matter, any .com or .exe file.  
  293. An exact description of what commands can be used appears below.
  294.  
  295. The next record tells Mmake that the Chess.obj file depends on two other
  296. files, Chess.c and Games.h.  If either of these two files has a later
  297. modification date than Chess.obj, Mmake will remake Chess.obj.  In this
  298. example, it would run the cl compiler with the -c argument. 
  299.  
  300. The drawscrn.obj record is interpreted in a similar manner.  Note that
  301. this record contains a full path and drive specification; any
  302. file name in any record can include a drive and/or directory specification.
  303. If the path of a command is not given, Mmake will look in the current 
  304. directory and the directories listed in the Ms-Dos PATH    environment
  305. string.  Files other than commands have to include thier full path
  306. name unless they are in the current directory.
  307.  
  308. RECORD ORDER
  309.  
  310. In some commercially-available versions of the make utility, the above
  311. make file would not work because of the order in which the files are
  312. listed.  If, for example,  Chess.c were changed, Chess.obj would get
  313. remade.  But Chess.exe would not, because by the time Chess.obj was 
  314. remade, the dependency line for Chess.exe would have already been checked.
  315.  
  316. This is not true of Mmake.  In the above example, before it decides
  317. whether or not to remake Chess.exe, it will look ahead to see if any
  318. of the files Chess.exe depends on need to be remade; if so, it will remake
  319. those fles (looking ahead again, if necessary) before deciding whether or 
  320. not to make Chess.exe.  
  321.  
  322. Therefore, the order of records in the make file is not critical. 
  323. However, Mmake will run a little faster if the records are arranged to 
  324. minimize look-ahead.  In the example, if the record for Chess.exe were 
  325. last, the make process would go faster.  Minimizing look-ahead can also 
  326. help if you encounter a "Stack Overflow" error when running Mmake; see 
  327. error messages, below.
  328.  
  329.  
  330.  
  331. LONG LINES
  332.  
  333. If a dependency line is too long to fit on a single 80-column line,
  334. it can be extended by placing a backslash (\) just before the end of 
  335. the line.  Any lines ending in a backslash are considered as 
  336. continuing on the next line; for example, the lines
  337.  
  338. Chess.exe : Chess.obj   drawscrn.obj   mymove.obj   \
  339. Scorkeep.obj  Highscr.obj  Newgame.obj  Replay.obj  
  340.  
  341. are treated by Mmake as a single line.  There is no limit to the number
  342. of lines that can be "connected" in this way.  The backslash must be
  343. the very last character on the line.
  344.  
  345.  
  346. COMMAND LINES
  347.  
  348. Each command line MUST begin with either a tab character or the '@'
  349. character; this is how Mmake distinguishes the commands from the 
  350. dependency lines.
  351.  
  352. In the example above, only one command line is shown for each dependency
  353. line.  However, there is no limit to the number of command lines that
  354. can follow a dependency line, as long as each one begins with a tab
  355. or '@' character.  
  356.  
  357. A command line that begins with the '@' character must have that
  358. character in the first column; the '@' is stripped off.  This can be
  359. used if you are using a word processor or editor that makes it
  360. inconvenient to use the tab character.  The '@' can be followed by
  361. spaces for clarity.  For example, the sample make file shown above
  362. could have been written as follows:
  363.  
  364. # chess - make file for chess.exe    
  365. # dummy file used for example only
  366. # 7/12/87
  367.  
  368. Chess.exe : Chess.obj   drawscrn.obj
  369. @   link Chess drawscrn;
  370.  
  371. Chess.Obj : Chess.c  Games.h
  372. @   cl -c Chess;
  373.  
  374. Drawscrn.obj : a:\chessboard\drawscrn.asm
  375. @   masm  a:\chessboard\drawscrn;
  376.  
  377.  
  378. The characters after the '@' can be either tabs or spaces; Mmake uses
  379. the '@' in the first column to recognize the line as a command.
  380.  
  381.  
  382.  
  383. COMMAND LINES, continued
  384.  
  385. Any .com or .exe file can be specified as the command to be executed.
  386. In addition, any internal DOS command (such as cd or copy) can be 
  387. given as one of the commands, as long as it is given in the form
  388.  
  389.     command /c dir
  390.  
  391. -- that is, you must run command.com with the /c option, followed by the
  392. Dos command you want to execute.  Batch files can be run the
  393. same way; they cannot be run without running a copy of command.com.
  394.  
  395. Continuing the above example, instead of simply linking the .obj files
  396. to create Chess.exe, we could also have changed directories, invoked
  397. an editor to edit a "scores" file, changed directories back to the \Chess 
  398. directory, then run the Chess program to test it.  The following record 
  399. in the make file would accomplish this:
  400.  
  401. Chess.exe : Chess.obj   drawscrn.obj 
  402.     link Chess drawscrn ;
  403.     command /c cd scores
  404.     edlin   highscores
  405.     command /c cd \Chess
  406.     Chess
  407.  
  408. If a command being run by Mmake returns an exit code greater than zero,
  409. Mmake will stop.  Additional commands will not be processed until you 
  410. run Mmake again.  You can override this feature by specifying the /I 
  411. option, which will cause Mmake to ignore exit codes.
  412.  
  413.  
  414.  
  415. ERROR MESSAGES
  416.  
  417. Mmake generates two different types of errors. Before it begins processing
  418. files, Mmake scans the entire make file, looking for errors in the make file
  419. itself.  Most such errors require that you edit the make file before 
  420. proceeding.   These errors are listed in alphabetical order under "MAKE 
  421. FILE ERRORS" below.
  422.  
  423. The second type of error is generated during the process of making one
  424. of the files listed in the make file.  These errors are listed in 
  425. alphabetical order under "PROCESSING ERRORS" below.
  426.  
  427.  
  428. MAKE FILE ERRORS
  429.  
  430.  /F option requires make file name.
  431.         
  432.          You entered the /F option on the Mmake command line, but
  433.          did not follow it with the name of the make file.  If you
  434.          want to use the defualt make file name, "makefile", you 
  435.          do not need the /F option on the command line.  If you 
  436.          want to use another file for the make file, enter /F
  437.          followed by the name of the make file, on the command line.
  438.  
  439.  File (filename) too big (must be < 32k).
  440.        
  441.         The make file must be less than 32 K in size.  If you get
  442.         this error, you can reduce the size of the make file by
  443.         removing or shortening comments, or moving some files so 
  444.         that shorter path names can be used in the make file.  If your
  445.         make file is still more than 32 K, you can get around this 
  446.         restriction by creating two separte make files and running
  447.         Mmake on each of them.  This size limit will be removed in the
  448.         next version of Mmake.
  449.  
  450.  
  451.  Illegal file or path name: (file or path from make file)
  452.  
  453.         The displayed path or file name in the make file 
  454.         is an illegal name.  This is NOT a "file not found" 
  455.         message.  It means that a file cannot even be looked 
  456.         for because the file or path name contains
  457.         illegal characters, two consecutive backslash ("\") 
  458.         characters, a colon in the middle of the name, or some
  459.         other illegal combination of characters.
  460.  
  461.  
  462.  
  463. MAKE FILE ERRORS (continued)
  464.  
  465.  Mmake creates a temporary file named (filename).
  466.  A file already exists with that name.
  467.  Okay to overwrite existing file? (press y or n).
  468.  
  469.         During operation, Mmake creates a temporary file with the
  470.         given name, in the default directory.  This file is erased
  471.         before Mmake finishes running.  You will not see the above
  472.         message unless a file by that name already exists in the
  473.         default directory.  If you see this message, pressing 'N'
  474.         will cause Mmake to stop.  Pressing 'Y' will overwrite the
  475.         existing temporary file, destroying its contents.
  476.  
  477.  Missing colon make file line: (line from make file).
  478.  
  479.         The line displayed is a dependency line, and does not
  480.         contain a colon separating the file to be created from
  481.         the files upon which it depends.  Any line in the make file
  482.         that does not begin with a tab or the '@' character is taken 
  483.         to be a dependency line unless the line right above it ends 
  484.         in a backslash, in which case it is considered part of the 
  485.         line above it.
  486.  
  487.  Missing dependencies in make file after: (line from make file).
  488.  
  489.         The dependency line displayed has a file to be created, but
  490.         no files upon which it depends.  Each dependency line of
  491.         the make file must contain a file to be created, then a 
  492.         colon, then one or more dependency files.
  493.  
  494.  No command line following make file line:  (line from make file).
  495.  
  496.         The dependecny line displayed is not followed by a command
  497.         line.  Command lines must begin with a tab or '@' character.
  498.         Each dependency line must be followed by at least one command
  499.         line.  Some implementations of the make utility have built-in 
  500.         rules which are used when no command is given.  It is expected
  501.         that this feature will be available in future versions of Mmake;
  502.         this version does not provide built-in make rules.
  503.  
  504.  Not enough memory to read make file (filename)
  505.  
  506.         Mmake.exe is unable to get enough memory to read the make file.
  507.         You need more memory in your machine to run Mmake.  If you have
  508.         a RAM disk or "Stay Resident" utilities installed, removing them
  509.         will make more memory available to programs such as Mmake.
  510.  
  511.         If you receive this error, we would appreciate hearing about it.
  512.  
  513.  
  514.  
  515. MAKE FILE ERRORS (continued)
  516.          
  517.  Too many files; make file must contain less than (number) files.
  518.         
  519.         Your make file contains more files to be created than Mmake
  520.         can handle.  The only solution is to reduce this number of
  521.         files in the make file; this can be done by splitting it 
  522.         into two parts and running each part separately.  If you do
  523.         this, the order in which you run the two make files may be
  524.         important, if the files in one depend on files in the other.
  525.  
  526.         If you receive this error, we would appreciate hearing about it.
  527.  
  528.  Two filenames before colon in make file line: (line from make file)
  529.  
  530.         The dependency line displayed has more than one file name 
  531.         before the colon.  Only one file to be created can be 
  532.         listed in each dependency line, though there can be many
  533.         dependency files.  
  534.         
  535.  Unable to open file (filename) for reading.
  536.  
  537.         The named file cannot be opened.  Normally, this means the
  538.         file does not exist, or that it is not in the current 
  539.         directory and not in one of the directories specified by PATH.
  540.  
  541.  Unable to create temporary file (filename).
  542.  
  543.         The temporary file cannot be created.  This may mean that
  544.         your disk is full, or that there is a directory with the
  545.         same name as the temp file, in the default directory.  In 
  546.         the former case, remove some files to make more room on 
  547.         your disk.  Remember that Mmake can access files on more than
  548.         one disk; just include the drive letter in the path name in
  549.         the make file or in the Dos PATH.  
  550.  
  551.  Unknown command line option: (option)
  552.  
  553.         You typed a command line option that Mmake does not 
  554.         recognize.  Type Mmake /H for a list of valid options.
  555.  
  556.  
  557. PROCESSING ERRORS
  558.  
  559.  Arg list too long.
  560.  
  561.         The command line is greater than 128 bytes long.  The total 
  562.     length of the command line must be less than 128 bytes.     The
  563.     best way to overcome this problem is to use a respone file for 
  564.     the input to your linker or compiler; most compilers and linkers
  565.     have an option that allows this.
  566.  
  567.  Can't execute command line: (command line)
  568.  Commands must have .exe, .com, or no extension.
  569.  
  570.         Only files ending in .com or .exe can be run as commands on
  571.         a command line in the make file.  As explained under 
  572.         "COMMAND LINES" above, .bat files or internal Dos commands
  573.         can be run by running a copy of command.com with its /c
  574.         option, followed by the command you wish to run.  If a 
  575.         command in the make file has no extension, Mmake assumes
  576.         that it has a .com or .exe extension.
  577.  
  578.  Exec format error
  579.  
  580.         The file being run is not an executable file or has been
  581.         altered in some way which makes it impossible to run.
  582.  
  583.  Execute error: (error message)
  584.  
  585.         Mmake is unable to run the program it is attempting to 
  586.         run, for reasons explained by the error message following
  587.         the colon.  Each of these error messages appears separately
  588.         in this list.
  589.  
  590.  Executing: (command line)
  591.  
  592.         This is not an error message; it simply tells you what 
  593.         command or program is being executed by Mmake.  If you
  594.         started Mmake with the /D (display only) option, this 
  595.         shows you the commands that would be executed by Mmake
  596.         if the /D option were not used.
  597.  
  598.  Exit code: (number)
  599.  
  600.         The program just run by Mmake ended with an error code; 
  601.         the exit code printed is from that program.  Consult the
  602.         manual for the program creating the error to find out what
  603.         the error code means.  Mmake will stop executing after
  604.         such an error is returned unless the /I option is used.
  605.  
  606.  No such file or directory.
  607.  
  608.         The command you specified cannot be found.
  609.  
  610.  
  611.  
  612. PROCESSING ERRORS (continued)
  613.  
  614.  Not enough core.
  615.  
  616.         There is not enough memory to run the program that Mmake
  617.         is attempting to run.  If you can free some memory by
  618.         removing "Terminate but Stay Resident" utilities, RAM
  619.         disks, print spoolers, etc., Mmake may be able to run
  620.         the program.
  621.  
  622.  Stack overflow.
  623.  
  624.          Mmake has run out of stack space during execution.  The 
  625.          most common cause of this is a dependency line that
  626.          has a file dependent on itself, such as 
  627.  
  628.          Chess.obj : Chess.obj.  
  629.  
  630.          The solution is to fix the dependency line.
  631.                  
  632.          This error may also be caused by a deeply-nested set of
  633.          dependencies.   In this case, you should be able to overcome
  634.          the problem by rearranging the make file to minimize 
  635.          look-ahead, since look-ahead uses stack space.  See the 
  636.          section above on "RECORD ORDER" for an explanation of how to 
  637.          minimize look-ahead.
  638.  
  639.          If you receive this error, we would appreciate hearing
  640.          about it.
  641.  
  642.  Unable to find or make (filename).
  643.  
  644.         The named file is listed in the make file as one upon which 
  645.         another file depends.  However, the named file does not 
  646.         exist, and there is no record in the make file indicating
  647.         how it can be created.  This causes Mmake to stop.  This 
  648.         usually means that either the file name was incorrectly 
  649.         typed,  that a record needs to be added to the make file
  650.         indicating how the named file is to be made, or that the
  651.         file is in a different directory than the one listed in the
  652.         make file.
  653.  
  654.  Unable to make file (filename); no commands.
  655.  
  656.         There are no commands following the dependency line for 
  657.         the named file.  If you get this error, we would appreciate
  658.         hearing about it.
  659.  
  660.  Warning:  Command line contains more than (number) arguments. Extra ignored.
  661.  
  662.         The number shown is the maximum number of arguments that can be
  663.         passed to a program run by Mmake.  The command is still run, 
  664.         but only the first (number) arguments have been passed.
  665.  
  666.         If you get this error, we would appreciate hearing about it.        
  667.  
  668.